// Unsafe version!!
// Año: 2011
// Autor: Eduardo Sanchez

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "client.h"


#pragma pack(1)

typedef struct {
    uint16_t num;
    char letra;
} datos;


int mostrar_datos(datos d){
    printf("Num = %d (= %x), letra = %c\n", d.num, d.num, d.letra);
    printf("Tamaño de la estructura = %lu\n", sizeof(datos));
    return 0;
}


int main(int argc, char *argv[])
{
    int c,s;
    size_t ret;
    short numero;
    short *ptr_s;
    datos data;
    char *server_name;

    if (argc!=2) {
        server_name = URL;
    } else
    {
        server_name = argv[1];
    }
      s = connect_to_server(server_name);
    if (s<0) {
        printf("Abortando!\n");
        return -1;
    }
    printf("Conectado al puerto %d del servidor %s\n\n", SERVER_PORT, server_name);

    data.num=45;
    data.letra='E';

    printf("Datos del servidor en Formato Host:\n");
    mostrar_datos(data);
    printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");

    //Convierte los datos de Host a Red:
    data.num = htons(data.num);

    // Envia la modificacion al servidor
    printf("Enviando datos al servidor:\n");
    ret = send(s, &data, sizeof(datos), 0);
    mostrar_datos(data);
    printf("La estructura tiene %lu bytes y se leyeron %lu bytes.\n", sizeof(datos),ret);
  
    printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
   // Bloquea hasta recibir
    ret = recv(s, &data, sizeof(datos), 0);
    printf("Recibiendo datos del servidor:\n");
    printf("La estructura tiene %lu bytes y se leyeron %lu bytes.\n", sizeof(datos),ret);
    //Convierte los datos de Red a Host:
    data.num = ntohs(data.num);
    mostrar_datos(data);
    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");

    close(s);

  return 0;
}
